home *** CD-ROM | disk | FTP | other *** search
/ NOVA - For the NeXT Workstation / NOVA - For the NeXT Workstation.iso / Apps / Clocks / clocks / ClockApp.m < prev    next >
Encoding:
Text File  |  1992-12-20  |  2.8 KB  |  99 lines

  1. // My stuff.
  2. #import "Animator.h"
  3. #import "ClockApp.h"
  4. #import "ClockView.h"
  5.  
  6. // appkit stuff
  7. #import <appkit/defaults.h>        // To get the dang things.
  8. #import <appkit/Control.h>        // To handle initing of dialSize slider.
  9. #import <appkit/Matrix.h>        // To handle initing of type matrix.
  10. #import <appkit/Window.h>        // to blast the window around.
  11.  
  12. // unix stuff.
  13. #import <stdlib.h>            // atof().
  14.  
  15. @implementation ClockApp
  16.  
  17. + new            // create the new application, and make us its delegate.
  18. {
  19.   self = [super new];
  20.   [self setDelegate:self];
  21.   return self;
  22. }
  23. - setClockView:anObject
  24. {
  25.   clockView=anObject;
  26.   return self;
  27. }
  28. // This is a gross, gross c function.  Positive side - it works!
  29. const char *ftoa( float f)
  30. {
  31.   static char num[ 100];
  32.   sprintf( num, "%f", f);
  33.   return num;
  34. }
  35. - terminate:sender        // store the position and size.
  36. {
  37.   NXRect r;
  38.   // This is stupid.  Need the _window's_ position in screen coordinates,
  39.   // and the _clockView's_ size (no coordinates) to be able to correctly
  40.   // place the window when re-run.  Didn't want to use placeWindow, as
  41.   // sizes and stuff didn't seem to work.
  42.   [[clockView window] getFrame:&r];
  43.   NXWriteDefault( [self appName], "WindowX", ftoa( r.origin.x));
  44.   NXWriteDefault( [self appName], "WindowY", ftoa( r.origin.y));
  45.   [clockView getBounds:&r];
  46.   NXWriteDefault( [self appName], "WindowSize", ftoa( r.size.width));
  47.   NXWriteDefault( [self appName], "DialSize", ftoa( [clockView dialSize]));
  48.   NXWriteDefault( [self appName], "ClockType", ftoa( [clockView clockType]));
  49.   return [super terminate:sender];
  50. }
  51. - appPowerOffIn:(int)ms andSave:(int)aFlag    // catch Workspace logout.
  52. {
  53.   return [self terminate:self];
  54. }
  55.  
  56. - setDialSizeSlider:anObject
  57. {
  58.   dialSizeSlider=anObject;
  59.   return self;
  60. }
  61. - setTypeMatrix:anObject
  62. {
  63.   typeMatrix=anObject;
  64.   return self;
  65. }
  66.  
  67. static NXDefaultsVector def=
  68.   {
  69.     { "WindowX", "250"},
  70.     { "WindowY", "400"},
  71.     { "WindowSize", "350"},
  72.     { "DialSize", ".05"},
  73.     { "ClockType", "3"},
  74.     {NULL},
  75.   };
  76.  
  77. - appDidInit:sender        // get info such as window positioning.
  78. {
  79.   NXRegisterDefaults( [self appName], def);
  80.   [clockView setDialSize:atof( NXGetDefaultValue( [self appName], "DialSize"))];
  81.   [dialSizeSlider setFloatValue:[clockView dialSize]];
  82.   [clockView setClockType:atoi( NXGetDefaultValue( [self appName], "ClockType"))];
  83.   [typeMatrix selectCellWithTag:[clockView clockType]];
  84.   
  85.   [[clockView window]
  86.           moveTo:atof( NXGetDefaultValue( [self appName], "WindowX"))
  87.             :atof( NXGetDefaultValue( [self appName], "WindowY"))];
  88.   [[clockView window]
  89.           sizeWindow:atof( NXGetDefaultValue( [self appName], "WindowSize"))
  90.                     :atof( NXGetDefaultValue( [self appName], "WindowSize"))];
  91.   
  92.   [[clockView window] display];            // Let's redraw some stuff.
  93.   [[clockView window] orderFront:self];        // and then display it.
  94.   [[clockView animator] start:self];        // start the fun!
  95.   return self;
  96. }
  97.  
  98. @end
  99.